import os
import sqlite3
from dbutils.pooled_db import PooledDB
from peewee import SqliteDatabase

from common.utils.utils_log import AntLogger


# 使用类变量来存储连接池实例
_pool_instance = None

class DatabasePool:
    def __init__(self, db_type="sqlite", db_file="stock_monitor.db", max_connections=5):
        """
        初始化数据库连接池
        :param db_type: 数据库类型，目前仅支持sqlite
        :param db_file: 数据库文件路径
        :param max_connections: 最大连接数
        """
        # 数据库文件路径
        self.db_file = db_file
        
        # 创建连接池
        if db_type == "sqlite":
            # 创建持久连接池
            self._pool = PooledDB(
                creator=sqlite3,  # 使用 sqlite3
                database=self.db_file,  # 数据库文件名
                maxconnections=max_connections,
                mincached=2,  # 初始化时，连接池中至少创建的空闲连接数
                maxcached=5,  # 连接池中最多空闲的连接
                maxshared=3,  # 连接池中最多共享的连接
                blocking=True,  # 如果没有可用连接，是否阻塞等待
            )
        else:
            raise ValueError("不支持的数据库类型")

        # 创建 Peewee 数据库对象
        self.database = SqliteDatabase(self.db_file)

    def get_connection(self):
        """获取一个数据库连接"""
        connection = self._pool.connection()
        AntLogger.info("成功获取数据库连接")
        return connection
    
    def close_all(self):
        """关闭所有连接"""
        if hasattr(self, '_pool'):
            self._pool.close()
            AntLogger.info("已关闭所有数据库连接")


def get_database_pool(db_type="sqlite", db_file="stock_monitor.db", max_connections=5):
    """
    获取数据库连接池实例（单例模式）
    :param db_type: 数据库类型
    :param db_file: 数据库文件路径
    :param max_connections: 最大连接数
    :return: 数据库连接池实例
    """
    global _pool_instance
    if _pool_instance is None:
        _pool_instance = DatabasePool(db_type, db_file, max_connections)
    return _pool_instance


